package com.xbongbong.saas.model;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.CustomerStatementEntity;

import java.util.List;
import java.util.Map;

/**
 * @author dell
 */
public interface CustomerStatementModel extends IModel<CustomerStatementEntity> {

    @Override
    Integer insert(CustomerStatementEntity entity) throws XbbException;

    /**
     * 批量新增
     * @param entityList
     * @throws XbbException
     */
    void insertBatch(List<CustomerStatementEntity> entityList) throws XbbException;

    /**
     * 批量新增，不插入es
     * @param dealWithEs 是否处理es
     * @param entityList
     * @throws XbbException
     */
    void insertBatch(boolean dealWithEs, List<CustomerStatementEntity> entityList) throws XbbException;

    @Override
    List<CustomerStatementEntity> findEntitys(Map<String, Object> param);

    @Override
    Integer getEntitysCount(Map<String, Object> param);

    /**
     * 批量删除对账单信息
     *
     * @param shouldDeleteIdList 对账单中需要删除的对账单数据id
     * @param corpid 公司id
     * @param del 删除标记
     * @return
     */
    Integer deleteBatch(List<Long> shouldDeleteIdList, String corpid, Integer del) throws XbbException;

    /**
     * 批量更新特定字段
     * @param list  数据列表
     * @param corpid 公司id
     * @return Integer
     * @throws XbbException XbbException
     */
    Integer updateBatch(List<CustomerStatementEntity> list, String corpid) throws XbbException;

    /**
     * 批量更新特定字段,判断是否更新es
     * 注：受限于线上未收款状态的旧回款计划，关联信息、金额、时间都可以随意更改，所以该update方法只能同步更新对账日期、应收金额、关联客户等信息。后续资金3期上线后，需要舍弃该方法，或把这些本不应该被改动的信息去掉
     * @param list  数据列表
     * @param corpid 公司id
     * @return java.lang.Integer
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    Integer updateBatchAbnormal(List<CustomerStatementEntity> list, String corpid) throws XbbException;

    /**
     * 批量更新特定字段
     * 注：受限于线上未收款状态的旧回款计划，关联信息、金额、时间都可以随意更改，所以该update方法只能同步更新对账日期、应收金额、关联客户等信息。后续资金3期上线后，需要舍弃该方法，或把这些本不应该被改动的信息去掉
     * @param list  数据列表
     * @param corpid 公司id
     * @param isUpdateEs 是否更新es
     * @return java.lang.Integer
     * @throws XbbException
     * @author yanglei copy zcp
     * @since v1.0
     * @version v1.0
     */
    Integer updateBatchAbnormalForDB(List<CustomerStatementEntity> list, String corpid , boolean isUpdateEs) throws XbbException;



    /**
     * 批量更新es（把库里数据同步到es）
     * @param list 数据库实体list
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    void updateBatchEs(List<CustomerStatementEntity> list) throws XbbException;

    CustomerStatementEntity getByKey(Long key, String corpid);

    /**
     * 获取最大id，用于迁移脚本时候记录进度所用
     *
     * @param param
     * @return
     */
    Long getMaxId(Map<String, Object> param);
}
